package com.example.demo.service;

import com.example.demo.dao.db2.Demo2Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * Created by lile on 2020/2/6.
 */
@Service
public class UserService {

    @Autowired
    Demo2Mapper userMapper;

    /**
     * cahcename/vale 是缓存模组件的名称,
     * keys是使用的key，可以用来指定，默认是方法参数值，SPel表达
     * keyGenerator key的生成器可以自己写.，可以指定key的生成器组件Id  key/keyGenerator 二选1
     * cacheManager 缓存管理器 更高级的抽象  可以指定使用哪个缓存管器 redis /hashmapper   cacheResolver/cacheManager 二选一 是一样的意思
     * @param id
     * @return
     */
    public int getUserCount(int id) {
        int total = userMapper.getUser();
        return total;
    }

    /**
     * 更新缓存
     *
     * @param id
     * @return key用一个 在查询的时候就会更改
     */
    @CachePut(cacheNames = {"user", "tmp"}, key = "#result")
    public int updateCacheUserCount(int id) {
        return id;
    }

    /**
     * 删除缓存
     * beforeInvocation 在方法执行之前执行，如果方法出异常也可以删除,默认方法为fasle在方法之后 如果方法出错缓存就不会清楚
     *
     * @param id
     * @return key
     */
    @CacheEvict(cacheNames = {"user", "tmp"}, key = "#id",beforeInvocation = true)
    public int delCacheUserCount(int id) {
        return id;
    }


}
